// // 声明基础数据类型
// // string number boolean null undefined symbol bigint

// // 字符串
// let msg: string = 'hello';
// msg = 1; // Error

// // 数字
// let num: number = 0;
// num = 'hello'; // Error

// // 布尔
// let flag: boolean = false;
// flag = 'hello'; // Error

// // null
// let nl: null = null;

// // undefined
// let a: undefined = undefined;
// a++; // Error

// show time
// 引用数据类型 数组 对象 函数
const arr: string[] = [];
arr.push('hello');

const arr1: string[][] = [
  ['hello', 'world'],
  ['hello', 'world'],
  ['hello', 'world'],
  ['hello', 'world'],
];

// const data: sss[] = [
//   {
//     id: 1,
//     value: 'hello',
//   },
// ];

// const arr1: Array<string> = [];
// arr1.push('hello');

// 对象 (接口)
interface Person {
  id: number;
  name: string;
  age?: number;
  children?: Person[];
  sayHi?(msg: string): number;
  // sayHi: (msg: string) => number;
}

const data: Person[] = [];

data.push({
  id: 1,
  name: 'zs',
  age: 35,
  sayHi (a) {
    console.log(a);
    return 123;
  },
});

data.push({
  id: 2,
  name: 'li',
  sayHi (a) {
    console.log(a);
    return 1;
  },
});

// 函数
function fn (msg: string): number {
  console.log(msg);
  return 1;
}

// 泛型
function f1<T> (a: T): T {
  // 一系列计算
  const xx: T = a;
  return xx;
}

const res = f1<Person>({
  id: 1,
  name: 'zs',
});
